package org.myspringframework.aop.aspectj;

import org.aopalliance.aop.Advice;
import org.myspringframework.aop.Pointcut;
import org.myspringframework.aop.PointcutAdvisor;
import org.myspringframework.aop.aspectj.AspectJExpressionPointcut;

//低级切面类advisor
//使用AspectJ表达式定义切点的用于描述在何处（连接点）以及如何（通知）应用切面。 只对应一个joinpoint和一个advice
//用于基于 AspectJ 表达式定义切入点（Pointcut）和通知（Advice）的 Advisor。
//允许开发者使用 AspectJ 表达式来灵活地定义切入点，然后将切面的通知与这个切入点关联。
public class AspectJExpressionPointcutAdvisor implements PointcutAdvisor {

    // 切点表达式实现，用于定义切点，即指定在哪些连接点上执行切面逻辑
    private AspectJExpressionPointcut pointcut;
    // 具体的拦截通知方法methodInterceptor
    private Advice advice;
    // 切点表达式
    private String expression;

    public void setExpression(String expression){
        this.expression = expression;
    }

    @Override
    public Pointcut getPointcut() {
        if (null == pointcut) {
            pointcut = new AspectJExpressionPointcut(expression);
        }
        return pointcut;
    }

    @Override
    public Advice getAdvice() {
        return advice;
    }

    public void setAdvice(Advice advice){
        this.advice = advice;
    }

}